class MemoryTraceCore (btfile:String,eventsFile:String){
	
  
    /*on instancie un lecteur de fichier*/  
    val reader = new memorytrace.readers.ReaderTxt();
    
    
    /*on recupere les lignes du fichier de backtraces*/
    private val backtraces  =reader.readBackTracesFile(btfile)
    
    
    /*on recupere les lignes du fichier de trace*/
    private val allocevents =reader.readEvents(eventsFile)
  
    
    /*on recupere les lignes*/
    var getBackTraces:java.util.ArrayList[memorytrace.domaine.StackCall]  =null
    
    
    /*on recupere*/
    var getAllocEvents:java.util.ArrayList[memorytrace.domaine.AllocEvent]=null
   
    
    
  /**
   * Contruit des objets decriavant les stack trace des allocation
   */
  def buildStackTraces()={
    if(getBackTraces!=null)
       getBackTraces;
    else
    {  
	    //
	    getBackTraces=new java.util.ArrayList
	    
	    try{
		    backtraces.foreach(s=>
		      {
		        val tokens=s.split("\\|")
		        val tks=(tokens(0),tokens(1),tokens(2))
		        getBackTraces.add(new memorytrace.domaine.StackCall(tks._2,tks._3,tks._1.toInt))
		        })
	    }
	   catch{
	     	case ex : ArrayIndexOutOfBoundsException => println(memorytrace.constantes.Constantes.MSG_STK_TRACE_INVALIDE)
	   }
	   finally {
	     
	   }
	    getBackTraces
    }
}
  
  /**
   * Constuit des objets decrivant les allocation, en mémoire
   */
  def buildAllocEvents()={
    
    if(getAllocEvents!=null)
      getAllocEvents;
    
    else{
      
       getAllocEvents =new java.util.ArrayList
       
       allocevents.foreach(event=>
           {
              var r="";
		      if(!(event.contains("#") || event.contains("="))){
		        r=event;
		      }
		      
		      if(r!=""){
		    	  val tokens = r.split("\\|");
		    	  tokens(1) match{
		    	    
		    	    case "m" => getAllocEvents.add(
		    	        new memorytrace.domaine.EventMalloc(tokens(0).toInt,
		    	        									tokens(1).toCharArray()(0), 
		    	        									tokens(2).toLong,
		    	        									tokens(3)))
		    	        									
		    	    case "c" => getAllocEvents.add(
		    	        new memorytrace.domaine.EventCalloc(tokens(0).toInt,
		    	        									tokens(1).toCharArray()(0), 
		    	        									tokens(2).toLong,
		    	        									tokens(3).toLong,
		    	        									tokens(4)))
		    	        
		    	    case "r" => getAllocEvents.add(
		    	        new memorytrace.domaine.EventRealloc(tokens(0).toInt,
		    	        									 tokens(1).toCharArray()(0), 
		    	        									 tokens(2),
		    	        									 tokens(3).toLong,
		    	        									 tokens(4)))
		    	        
		    	    case "f" => getAllocEvents.add(
		    	        new memorytrace.domaine.EventFree(tokens(0).toInt,
		    	        								  tokens(1).toCharArray()(0), 
		    	        								  tokens(2)))
		    	  }
		      }
           }
       
       )
         getAllocEvents
    }
  }
}
